import Vue from 'vue'
import App from './App.vue'
import store from './store'

Vue.config.productionTip = false

// 全局事件总线
Vue.prototype.$eventHub = new Vue()

// 全局导航方法
Vue.prototype.$navigateTo = function(url, options = {}) {
  console.log('自定义导航方法:', url, options)
  
  // 默认配置
  const defaultOptions = {
    animationType: 'pop-in',
    animationDuration: 300,
    events: {},
    success: null,
    fail: null,
    complete: null
  }
  
  // 合并配置
  const finalOptions = { ...defaultOptions, ...options }
  
  // 处理登录页面跳转
  if (url.indexOf('/pages/login/') !== -1) {
    uni.showLoading({
      title: '正在跳转...'
    })
    
    // 使用reLaunch确保清除页面栈
    uni.reLaunch({
      url,
      success: (res) => {
        console.log('页面跳转成功:', res)
        finalOptions.success && finalOptions.success(res)
      },
      fail: (err) => {
        console.error('页面跳转失败:', err)
        // 尝试备用方案
        setTimeout(() => {
          uni.navigateTo({
            url,
            success: finalOptions.success,
            fail: (secondErr) => {
              console.error('备用跳转也失败:', secondErr)
              finalOptions.fail && finalOptions.fail(secondErr)
              
              // 最后的降级处理
              uni.showModal({
                title: '提示',
                content: '页面跳转异常，是否重试？',
                success: (res) => {
                  if (res.confirm) {
                    // 重新尝试跳转
                    setTimeout(() => {
                      this.$navigateTo(url, options)
                    }, 300)
                  }
                }
              })
            }
          })
        }, 300)
      },
      complete: () => {
        uni.hideLoading()
        finalOptions.complete && finalOptions.complete()
      }
    })
  } else {
    // 普通页面跳转
    uni.navigateTo({
      url,
      animationType: finalOptions.animationType,
      animationDuration: finalOptions.animationDuration,
      events: finalOptions.events,
      success: (res) => {
        console.log('页面跳转成功:', res)
        finalOptions.success && finalOptions.success(res)
      },
      fail: (err) => {
        console.error('页面跳转失败:', err)
        
        // 尝试使用reLaunch
        uni.reLaunch({
          url,
          success: finalOptions.success,
          fail: (secondErr) => {
            console.error('备用跳转也失败:', secondErr)
            finalOptions.fail && finalOptions.fail(secondErr)
            
            // 显示错误提示
            uni.showToast({
              title: '页面跳转失败',
              icon: 'none'
            })
          }
        })
      },
      complete: finalOptions.complete
    })
  }
}

App.mpType = 'app'

const app = new Vue({
  store,
  ...App
})
app.$mount()

// 在Vue实例初始化后再导入app.js进行增强
setTimeout(() => {
  try {
    import('./app.js').then(() => {
      console.log('app.js增强功能加载成功');
    }).catch(e => {
      console.error('app.js增强功能加载失败:', e);
    });
  } catch (e) {
    console.error('导入app.js时出错:', e);
  }
}, 200); 